home *** CD-ROM | disk | FTP | other *** search
/ Floppyshop 2 / Floppyshop - 2.zip / Floppyshop - 2.iso / diskmags / 0022-3.564 / dmg-3451 / data / bigsp.dat < prev    next >
Text File  |  1987-04-21  |  6KB  |  218 lines

  1.                          Big sprite routine.
  2.                       Written By Wheee the fibble.
  3.  
  4.     Well, here is my nice big sprite routine.  It uses screen
  5. copy rather than the sprite command since the sprite command is
  6. completely crap...  Anyway, on with the listing...
  7.  
  8. 50 mode 0 : key off : hide : flash off : click off : auto back off 
  9.    : update off : curs off
  10.  
  11.     This just sets up the screen and turns everything like the 
  12. cursor off.
  13.  
  14. 60 fill logic+32000 to logic+32032,0 : get palette (logic)
  15.  
  16.     This makes the palette black (quickly).
  17.  
  18. 90 dim XY(360,1)
  19.  
  20.     This is the array to hold the sprites movement pattern.
  21.  
  22. 100 for T=0 to 360
  23.  
  24.     Do all 360 degrees.
  25.  
  26. 110 XY(T,0)=sin(rad(T*3))*cos(rad(T*4))*90+90
  27.  
  28.     Calculates the X co-ordinate of the sinus wave.  Sinus waves
  29. are calculated by mutiplying various combination of SIN and COS
  30. together.
  31.   
  32. 120 XY(T,1)=cos(rad(T*3))*sin(rad(T*5))*35+35 
  33.  
  34.     Calculate the Y co-ordinate.  I always use ,0 for the X and
  35. ,1  for the Y co-ordinate.
  36.  
  37. 130 next T
  38.  
  39.     Do the loop.
  40.  
  41. 140 dim MARKER(7)
  42.  
  43.     Used to hold the position through the memory bank of each
  44. sprite image. I only use 8 here instead of 16 to save memory.
  45.  
  46. 150 reserve as work 12,140000 
  47.  
  48.     Memory bank to hold the sprite image.
  49.  
  50. 160 fill start(12) to start(12)+length(12),0
  51.  
  52.     Clear it.
  53.  
  54. 170 TT$="WTF"
  55.  
  56.     The text that will be used as the sprite.
  57.  
  58. 180 home : pen 1 : print TT$
  59.  
  60.     Dump to the screen.
  61.  
  62. 250 cls back 
  63.  
  64.     Clear the background screen as STOS always prints text there
  65. too.
  66.  
  67. 260 zoom physic,0,0,len(TT$)*8-1,7 to back,12,7,101,120
  68.  
  69.     Zoom the text up.
  70.  
  71. 270 for T=0 to 7
  72.  
  73.     Do 8 images (0-7 is 8 images).
  74.  
  75. 280 MARKER(T)=T*16384
  76.  
  77.     This is the position of the sprite inside the memory bank.
  78.  
  79. 290 screen copy back,0,0,128,128 to start(12)+MARKER(T),0,0
  80.  
  81.     Copy the zoomed text to the correct place in the bank.
  82.  
  83. 300 screen copy back,-2,0,318,128 to back,0,0
  84.  
  85.     Scroll the screen right by 2 pixels.
  86.  
  87. 310 next T 
  88.  
  89.     Do it for the 8 images.
  90.  
  91. 320 XPS=0 : YPS=0
  92.  
  93.     Used as markers to hold the position of the sprite through
  94. the sinus wave.
  95.  
  96. 330 cls physic : cls back : cls logic
  97.  
  98.     Clear all of the screens.
  99.  
  100. 340 palette 0,$777
  101.  
  102.     Set the palette.
  103.  
  104. 350 wait vbl
  105.  
  106.     Wait for the next vbl as PALETTE only updates the palette then.
  107.  
  108. 360 logic=back 
  109.  
  110.     Set up screen swap.
  111.  
  112. 400 repeat 
  113.  
  114.     Start of the main loop.
  115.  
  116. 410 SPN=(XY(XPS,0) mod 16)/2
  117.  
  118.     This calculates number of the image to use. MOD gives you
  119. the remainder of the devision (0-15) and then devides it by 2 as
  120. I've only stored 8 images.  If you imagine that the sprite is at
  121. co-ordinates 166,100 then 166 mod 16 would give you what's
  122. left after 166 is devided by 16, 6. Devide by two and you get 3,
  123. so we want the 3rd sprite image in the memory bank!
  124.  
  125. 420 XCRD=XY(XPS,0)/16*16
  126.  
  127.     This calcualtes the nearset multiple of 16 to the left of
  128. the sprite co-ordinate.
  129.  
  130. 430 YCRD=XY(YPS,1)
  131.  
  132.     Read the Y co-ordinate. A bit unneccesary, but what the hell.
  133.  
  134. 440 XPS=XPS mod 360+1 
  135.  
  136.     This will increase XPS by one and wrap it back to 1 when it
  137. reaches 360. It's much the same as XPS = XPS + 1 : IF XPS > 360
  138. THEN XPS = 1   but a big faster.
  139.  
  140. 450 YPS=YPS mod 360+1 
  141.  
  142.     Do the same for the YPS.
  143.  
  144. 460 screen copy start(12)+MARKER(SPN),0,0,128,127 to logic,XCRD,YCRD
  145.  
  146.     Copy the sprite to the screen.  This copys the image found at
  147. the start of bank 12 plus the value of MARKER(SPN) to the
  148. nearest mutilple of 16 on logic.
  149.  
  150. 470 screen swap
  151.  
  152.     Swap the address of logic and physic.
  153.  
  154. 490 wait vbl
  155.  
  156.     Wait for the vbl.
  157.  
  158. 500 until inkey$=" "
  159.  
  160.     Until you press space.
  161.  
  162. 510 fade 3 : for T=1 to 30 : wait vbl : next T
  163.  
  164.     Fade out.
  165.  
  166. 520 end
  167.  
  168.     A bit too complicated to go into here...
  169.  
  170.  
  171.     Well, this may seem a bit complicated, but considering that
  172. the 128x128 sprite takes up only about 50% processor time it's
  173. surely worth it...
  174.     In case you don't quite see how it works I'll give a brief
  175. account of the principle involved.
  176.     The technique itself is called "pre-shifting".  Say for
  177. example you wanted to display a sprite at co-ordinates 166,100.
  178. With the sprite comand you'd just put in SPRITE 1,166,100,1.
  179. But this is fantastically slow.  As the ST's screen is made up in
  180. multiples of 8 bytes (or 16 pixels) STOS has to shift your sprite's
  181. image along by 6 pixels and the copy it to the nearest mutiple of
  182. 16.  As you can imagine, this takes some time (especially when it
  183. has benn programmed by Francois...).   So then, instead of getting
  184. STOS to shift the sprite along by 6 pixels we can do it ourselves
  185. and so we don't need to use Francois' crap sprite routine.  So,
  186. now we can simply copy the 6th image (scrolled 6 pixels right) to
  187. 160,100 and it will appear to be at 166,100! Great!  Unfortunatly
  188. it does take up rather a lot of memory to hold 16 images and so it's
  189. quite usual to hold only 8, each one scrolled 2 pixels to the right
  190. rather than one.
  191.     Well, do you get it?  I doubt it after my rather bad explanation,
  192. but never mind - it'll all look different in the morning...
  193.     By the way, have a read of my doc on hertz (if it's printed)
  194. and then put a raster in for this routine for a 64x64 sprite.  Then
  195. try it using the normal STOS sprite method to see a rather amazing
  196. difference!
  197.     If you're intrested, this routine was taken from a disk of STOS
  198. source that A Clockwork Orange (of Better Than Life fame) and myself
  199. are putting together.  If you want to know more give me a call
  200. ( phone (0389 648240 and ask for Billy) and I'll let you know more
  201. about it.  It should be on general release quite soon, so watch out
  202. for it...  It will give away many, many tricks used in Better than
  203. life (full screen horizontal 64 plane parallax background taking up
  204. about 10% processor time?? No problem...).  Anyway, enough plugging
  205. (I always feel guilty about it).
  206.  
  207.                  Bye then...
  208.  
  209.                    See you tommorow...
  210.  
  211. note from edior: These sprites may be big, but they're not as big 
  212. as the sprites sighted off the coast of western Spain in 1324 by 
  213. Hugo 'Harry' McHammish.
  214.  
  215.  
  216.  
  217.  
  218.